perm filename SCR5A.F4[MU5,LCS] blob
sn#153745 filedate 1977-03-17 generic text, type T, neo UTF8
C THIS PROGRAM IS THE PROPERTY OF LELAND SMITH, PROFESSOR OF MUSIC
C AT STANFORD UNIVERSITY. IT MAY NOT BE COPIED OR ALTERED IN ANY
C WAY WITHOUT WRITTEN PERMISSION OF THE AUTHOR.
C LOAD 'SCORE' WITH BRZ.REL (RANDOM NUMBER GENERATOR AND 'ZERPP') -
C AND, IF DESIRED, A SUBROUTINE WITH THE FOLLOWING HEADING:
C SUBROUTINE SUBR
C COMMON/X/P(30),INST,IPAR,CNT(25),BT,IREST,CVT(35),PL(30),DF,DUR(25)
C INST=INST#. IPAR=PARAM#. DF=DUTY FACTOR. WHEN SUBROUTINE IS CALLED
COMMON/X/P(30),J,L,CNT(25),BT,MK,VX(35),PL(30),DF,DUR(26),TF,
1XT(25),ROFF(25),V(2000),NP(25),PCH(25,32),INST(26),IXIN,NINS,IALL,
1DURX,AMPFAC,IT(30),I,OP1,INUM(25),BG(80),INP(72),TP,
1CVTX,ISCA(12),IDAT(11),IQ(25),SCAL(86),MU5(14)
1,LIST(78),INVIS(25),RDEV(25),IBLA,KSLA,ICOM,ISEMI,IMIN,ISTAR
1,IEL,IPLUS
COMMON/SC/ML,JJ,NNUM,NFLG,JA,ISUB,CODE,IAMP,M
COMMON /Q/ BNW(40),NWZ
COMMON/FINE/LK
COMMON/RW/NWRITE,NDEC,LPT,DEBUG,KZY
DIMENSION IV(2000)
DATA IPLAY/'PLAY'/,IEND/'END'/,ISECT/'SECT'/,ITMPO/'TEMP'/
1,IRUN2/'RUN;'/,IRUN/'RUN'/,KZY/25/,IVV/'V'/
1,ILFP/'('/,IAT/'@'/,IRTP/')'/,IDOL/'$'/,IFINI/'FINI'/
EQUIVALENCE (VX2,VX(2)),(VX1,VX(1))
1,(IPP,ISCA(2)),(VX3,VX(3)),(IEN,ISCA(4)),(IE,ISCA(5))
1,(VX4,VX(4)),(VX5,VX(5)),(VX6,VX(6)),(IU,ISCA(7)),(ITT,MU5(1))
1,(ISS,ISCA(9)),(ID,ISCA(3)),(IF,ISCA(6)),(IDOT,
1IDAT(11)),(IEM,MU5(12)),(II,MU5(10)),(IR,MU5(6)),(IXX,MU5(9))
1,(IG,ISCA(8)),(IAA,ISCA(10)),(IV(1),V(1))
C IF DIMENS. ARE CHANGED, CHANGE KZY. ALL CHNGS MUST BE MULTS OF KZY.
C SET INST(KZY+1), CHECK BG, CHECK BLOCK DATA VALUES.
CVTX=10000.
CALL INSTS
LPAR=0
DO 1900 K=1,KZY
1900 INUM(K)=K
IPRN=0
QX=0.
MOT=0
RETRO=-1.
INVRT=-1
LCNT=1
PARENS=0
JZ=1
PR=0
IAMP=0
C IAMP IS 'BLANK LINE'FLAG ON PP1-3.
T5=0
NINS=0
K=0
IDALL=-1
BT=0
NWZ=1
BNW(1)=0
I=1
KL=0
TP=0
KN=IBLA
RA=0
CHN=0
DO 127 K=1,77,3
127 LIST(K)=0
C INITIALIZES MOTIVIC LIST FOR ERROR FINDING ROUTINE.
NWX=0
BY=-1
DO 1128 K=1,KZY
INVIS(K)=0
INST(K)=0
CNT(K)=0
RDEV(K)=0
C RDEV IS FOR RAND DEVIATIONS AT RUN TIME
NP(K)=0
IQ(K)=0
C IQ IS FOR RESTART FLAG
DO 1128 L=1,32
1128 PCH(K,L)=0
2308 JREAD=1
4400 READ(NDEC,1007)LN,J,INP
C****** LN=LINE NUM, J=INST NAME *******
WRITE(LPT,1007)LN,J,INP
1007 FORMAT(I,A4,72A1)
441 IF(J.EQ.IBLA)GO TO 4400
MLX=1
IZ=0
JA=-1
ISUB=4
ALL=1.
VX1=0
VX2=0
VX3=0
LK=-1
K=0
IF(V(I-1).NE.-9900.-BY)GO TO 364
BY=-1.
I=I-1
364 DO 361 JD=1,72
N=INP(JD)
IF(N.NE.IR)GO TO 361
C LOOKS FOR 'RESTART'
DO 3611 M=JD,72
KL=INP(M)
IF(KL.EQ.IBLA.OR.KL.EQ.ISEMI.OR.KL.EQ.KSLA.OR.KL.EQ.ICOM)GO TO 3631
3611 INP(M)=IBLA
C CHANGES 'RESTART' TO BLANKS
3631 DO 363 N=1,NINS
IF(J.NE.INST(N))GO TO 363
IQ(N)=-1
C SETS RESTART FLAG. THIS INST WILL NOW APPEAR WITH NEW NUM.
GO TO 362
363 CONTINUE
361 IF(N.EQ.KSLA.OR.N.EQ.ISEMI)GO TO 6773
6773 K=K+1
IF(K.GT.NINS)GO TO 36
IF(INST(K).NE.J.OR.IQ(K).EQ.-1)GO TO 6773
C FINDS CORRECT INST NUM. PASSES RESTARTED INSTS.
LK=K
GO TO 1773
36 IF(J.EQ.IRUN2.OR.J.EQ.IRUN)CALL RUNIT
IF(J.EQ.ITMPO.OR.J.EQ.IPLAY.OR.ISUB.GT.4)GO TO 1773
IF(J.EQ.ISECT)GO TO 1081
C****************** ABOVE AND BELOW FOR 'SECTIONS'
IF(J.EQ.IEND.OR.J.EQ.IFINI)GO TO 1082
362 LK=NINS+1
IF(LK.GT.KZY)GO TO 99
INST(LK)=J
IZ=LK
GO TO 1773
C*********** DOWN TO 99 FOR 'SECTIONS'
1083 V(I)=-99.
KL=1
GO TO 3083
C READS 'PLAY SECT. N1,N2'
1081 V(I)=-199.
KL=4
3083 DO 2081 K=KL,72
IF(INP(K).EQ.IBLA)GO TO 2081
IV(I+1)=INP(K)
I=I+2
3081 BY=-1.
GO TO 2308
2081 CONTINUE
C READS SECTION IDENTIFIER, -199. MARKS BEGINNING
C1082 IF(V(I-1).EQ.-9900.-BY)I=I-1
C********* FEB 15,71
1082 V(I)=-299.
I=I+1
GO TO 3081
C MARKS END OF SECTION
C************************
99 WRITE(LPT,199)LN
C****** TYPE IS FOR PDP10 *********
STOP
199 FORMAT(' ERROR!! LAST LINE READ =',I6/)
4 IF(LK.LE.NINS)GO TO 8773
IF(ALL.GT.0)GO TO 1004
IF(IDALL.GT.0)GO TO 8773
BG(LK)=VX1
IDALL=LK
GO TO 2004
C 'MOVE' CHANGES IN 'ALINS' CAN'T BE RESET IN INDIV. INSTS.
1004 BG(LK)=VX1
IF(LK.EQ.IZ)VX1=0
C MAY 3,71 **** ALL PARAMS WILL BE SET UP AT TIME 0.
C CHECK EFFECT ON 'MOVE'!
C ******** APR.23, 1971 FIXES BG TIMES IN 'MOVE'?????!!!!!!!
2004 NINS=LK
IF(VX3.NE.0)VX2=10000.+VX3
IF(VX2.EQ.0)VX2=-1
DUR(LK)=VX2
GO TO 900
C******** ABOVE FOR REST ONLY ENTRIES. FEB 18,71
8773 IF(VX2.NE.0)VX1=VX1*10000.+VX2
900 IF(VX1.EQ.BY.AND.J.NE.IPLAY)GO TO 5773
C*********** 'PLAY' IS FOR 'SECTIONS'
BY=VX1
C BY=CURRENT BG TIME.
C********* FEB 15,71
V(I)=-9900.-BY
I=I+1
IF(NWZ.NE.0)CALL BGSORT(BY)
5773 IF(J.EQ.ITMPO)GO TO 1106
IF(J.EQ.IPLAY)GO TO 1083
C*********** ABOVE FOR 'SECTIONS'
4773 NW=LPAR
CC IF(I.GT.1900.)TYPE 107,I
C *********** TYPE IS FOR PDP10 -- GIVES WARNING NEAR END OF V *******
ALL=1.
CVT=0
DF=0
ISUB=1
1299 IF(JZ.NE.0)GO TO 1773
77732 FORMAT(72A1)
87732 FORMAT(1X72A1)
7773 READ(NDEC,2114)LN,INP
WRITE(LPT,2114)LN,INP
442 IF(INP(1).EQ.IBLA)GO TO 7773
77733 MLX=1
C 'LISTS' MUST END WITH *
1773 IF(IPRN.EQ.0)GO TO 17732
L=I-1
IF(V(I-1).EQ.999.)L=L-1
IPRN=IPRN-1
IF(PARENS.EQ.0)GO TO 17733
PARENS=0
LIST(LCNT+2)=L
LCNT=LCNT+3
IF(IPRN.EQ.0)GO TO 17732
IPRN=0
17733 LIST(MOT)=L
MOT=0
C FOR ERROR TRAP
17732 JZ=0
N=0
17731 ML=MLX
C FOR MUSIC5 CONVERSIONS (512/SRATE)
C BIG LOOP -- TO END OF PAGE 1.
JD=ML
975 N=INP(JD)
JD1=JD+1
IF(N.EQ.IBLA.OR.N.EQ.ICOM)GO TO 236
C ((((())))) MAY 13,71 /Z (D4/E/X 2 3)/ CS/ ETC. CAN USE 26 LABELS.
33611 IF(N.NE.ILFP.AND.N.NE.IRTP)GO TO 2361
INP(JD)=IBLA
L=JD-1
5113 IF(INP(L).NE.IBLA)GO TO 2113
L=L-1
GO TO 5113
2113 IF(N.EQ.IRTP)GO TO 3361
IF(PARENS.EQ.0)GO TO 1140
LCNT=LCNT+3
IF(MOT.NE.0)GO TO 11403
MOT=LCNT-1
1140 N=LCNT-1
DO 11401 JC=1,N,3
IF(INP(L).NE.LIST(JC))GO TO 11401
C FINDS DUPLICATE IDENTIFIER
WRITE(LPT, 11402)INP(L)
GO TO 99
11403 WRITE(LPT, 11404)
GO TO 99
11404 FORMAT(' MORE THAN 2 PARENS OPEN'/)
11402 FORMAT(' MOTIVIC (',A1,') USED TWICE')
11401 CONTINUE
LIST(LCNT)=INP(L)
PARENS=-1.
INP(L)=IBLA
LIST(LCNT+1)=I
GO TO 236
3361 IPRN=IPRN+1
GO TO 236
2361 IF(N.NE.IAT)GO TO 5361
DO 113 L=1,72
K=JD+L
C K IS USED AT 240!!!
JG=INP(K)
IF(JG.NE.IMIN)GO TO 6113
RETRO=0
INP(K)=IBLA
GO TO 113
6113 IF(JG.NE.IDOL)GO TO 7113
C '$' IS FOR INVERSIONS IN 'NOTES'
INVRT=0
GO TO 113
7113 IF(JG.NE.IBLA)GO TO 4113
113 CONTINUE
4113 DO 6361 L=1,LCNT,3
IF(JG.NE.LIST(L))GO TO 6361
VX1=0
JDO=JD+2
DO 40 M=JDO,72
JG=INP(M)
IF(JG.EQ.IBLA)GO TO 40
IF(JG.EQ.KSLA.OR.JG.EQ.ISEMI.OR.JG.EQ.ISTAR)GO TO 140
ML=M
GO TO 240
40 CONTINUE
240 JC=JA
JA=-1
INP(K)=IBLA
CALL SCANR
JA=JC
140 JC=1
KN=LIST(L+1)
M=LIST(L+2)+1
IF(RETRO.LT.0)GO TO 640
JC=M-1
M=KN-1
KN=JC
JC=-1
RETRO=-1.
640 IF(INVRT.LT.0)GO TO 940
840 X=V(KN)
V(I)=X+VX1
C FINDS CENTER FOR INVERSION (+TRANSP.)
I=I+1
KN=KN+JC
IF(V(KN-JC).NE.85.)GO TO 940
V(I-1)=85.
GO TO 840
940 Z=V(KN)
IF(INVRT.EQ.0)GO TO 440
IF(VX1.EQ.0)GO TO 540
C " @Q N " WHERE N= 1/2 STEPS IN 'NOTES' OR MULT FACTOR IN OTHERS.
IF(CODE.EQ.-33.)GO TO 440
V(I)=Z*VX1
GO TO 7361
440 IF(Z.EQ.85.)GO TO 540
Y=0
IF(INVRT.EQ.0)Y=(X-Z)*2.
V(I)=Z+VX1+Y
GO TO 7361
540 V(I)=Z
7361 I=I+1
KN=KN+JC
IF(KN.NE.M)GO TO 940
INVRT=-1
RB=V(I-1)
DO 8361 L=JD,72
JG=INP(L)
C PUT IN NOV 25, 72
IF(JG.EQ.ISEMI)GO TO 93612
INP(L)=IBLA
IF(JG.EQ.KSLA)GO TO 9361
IF(JG.EQ.IRTP)IPRN=IPRN+1
8361 IF(JG.EQ.ISTAR)IAMP=-1
9361 MLX=L
C NOTE DIFFERENCES IN SCOLB FROM HERE TO 43611
IF(IAMP.EQ.0)GO TO 1773
JZ=-1
93612 IF(IAMP.EQ.0)GO TO 93611
C NOV 25, 72
GO TO 3013
93611 IF(JG.EQ.ISEMI)GO TO 7773
JZ=0
IF(IPRN.NE.0)GO TO 1773
GO TO 236
6361 CONTINUE
GO TO 99
C @@@@@@@@@@@@@@@@@@@@@@@@@@
5361 IF(N.NE.ID.OR.ISUB.NE.1)GO TO 53611
IF(INP(JD+1).NE.IF)GO TO 5362
C JUMP IF NOT DUTY FACTOR
DF=DF-100.
GO TO 43615
53611 IF(N.NE.ISS.OR.INP(JD+1).NE.'U')GO TO 53612
DF=DF-200
C FOR SUBROUTINE FLAG. CAN'T CALL SUBR AT SAME TIME AS REP OR X!!!!
GO TO 43615
53612 IF(N.NE.IAA)GO TO 53613
C FINDS 'ALL'.
IF(INP(JD+1).NE.'L')GO TO 236
ALL=-1.
GO TO 43615
53613 IF(N.NE.IF.OR.INP(JD1).NE.IR)GO TO 43611
C JUMP IF NOT "FREQ"
CVT=-1
GO TO 43615
5362 IF(INP(JD+2).NE.IR.OR.INP(JD1).NE.IU)GO TO 236
C JUMP IF NOT "DUR"
CVT=1
GO TO 43615
C FOR DUTY FACTOR
C TYPE 'ALL' AFTER PARAM NUM TO PUT DATA IN ALL INSTS.
43611 IF(ISUB.NE.4)GO TO 43613
IF(N.NE.IG)GO TO 43616
C NEXT MAKES INST NAME, P1 AND P2 INVISIBLE (FOR GEN AND VAR)
INVIS(LK)=-1
GO TO 43615
43616 IF(N.NE.IVV)GO TO 43613
INVIS(LK)=1
43615 DO 43614 L=JD,72
N=INP(L)
IF(N.EQ.IBLA.OR.N.EQ.ICOM.OR.N.EQ.ISEMI.OR.N.EQ.KSLA)GO TO 236
43614 INP(L)=IBLA
43613 IF(N.NE.KSLA)GO TO 636
MLX=JD1
JZ=-1
INP(JD)=ISEMI
436 IF(INP(MLX).NE.IBLA)GO TO 336
MLX=MLX+1
GO TO 436
636 IF(N.NE.ISEMI)GO TO 936
336 IF(ISUB.GT.3)GO TO 1899
GO TO (101,102,103),ISUB
C PAR MOV LIST OTHERS
936 IF(N.NE.IDOT)GO TO 736
L=INP(JD1)
DO 836 KL=1,10
836 IF(L.EQ.IDAT(KL))GO TO 236
IF(CODE.EQ.-22.)INP(JD)=1
GO TO 236
C CHANGES DOTTED RHYTHMS TO '1'S.
736 IF(N.NE.ISTAR)GO TO 236
IAMP=-1
INP(JD)=IBLA
236 JD=JD1
IF(JD.LT.73)GO TO 975
GO TO 99
101 NX=INP(ML)
IZ=ML
ML=ML+1
IF(NX.EQ.IBLA)GO TO 101
C ⊗⊗⊗⊗⊗ MAY 13,71 @@@@@@@@@@
JA=-1
IF(NX.EQ.IPP)GO TO 1
IF(NX.EQ.IE)GO TO 2308
IF(NX.EQ.IR)CALL RUNIT
C 'RUN' MAY REPLACE 'END' FOR LAST INST.
C LOOKS FOR PARAM, END, RUN OR I(=INS NUM.)
IF(NX.EQ.ID)GO TO 7720
IF(NX.NE.II)GO TO 99
1 CALL SCANR
LPAR=VX1
IF(NX.NE.II)GO TO 5703
INUM(LK)=LPAR
C RESETS "INS" NUMBER
GO TO 1299
5703 IF(LPAR.EQ.2)CVT=1
C P2 AND RHY ALWAYS CONVERT AS "DUR"
IJ=LPAR
IAMP=0
IF(IJ.GT.NP(LK).AND.IJ.LT.31)NP(LK)=IJ
IF(LPAR.EQ.32)LPAR=1
V(I)=LPAR+LK*10000
C +1=WDCNT, +2=CODE, +3='NM' CCCCC
IJ=I+1
I=I+4
ITMP=0
CODE=0
NFLG=1
ML=IZ+M
C RE=REP R=RHY L=LIT M=MOVE MX=MOVX N=NOTES NU=NUM
C S=SUBR RL=RLIST RN=RNOTES
5702 ML=ML+1
IF(ML.GT.72)GO TO 99
N=INP(ML)
IF(N.EQ.IBLA.OR.N.EQ.ICOM)GO TO 5702
NL=INP(ML+1)
JA=-1
ISUB=0
IF(N.EQ.IXX)GO TO 2703
IF(N.EQ.IR)GO TO 6702
4005 JA=0
IF(N.EQ.IEN)GO TO 6005
IF(N.EQ.IEM)GO TO 703
IF(N.EQ.ISS)GO TO 6703
IF(N.EQ.ISEMI)GO TO 2018
IF(N.EQ.IPP)JA=-1
C FOR /P5 P3/
CALL SCANR
I=I+JJ
V(IJ+1)=NNUM+DF
IF(JJ.EQ.1)GO TO 4006
C IF NNUM IS '-2' THEN NOTES ARE PRINTED
IF(NNUM.NE.-2)GO TO 5006
CVT=-1
IX=IJ+3
DO 2006 K=2,JJ,3
2006 CALL RANR(VX,K)
C FOR RAN. SELEC. OF NOTES. FINDS HIGHEST NOTE.
5006 IX=IJ+2
DO 6006 K=1,JJ
6006 V(IX+K)=VX(K)
GO TO 3013
4006 IF(JA.LT.0)VX1=VX1/100.+9999.
C CHANGES /P5 P3/ TO /P5 9999.03/
V(I-1)=VX1
IF(NNUM.EQ.-2)CVT=-1.
GO TO 3013
6702 IF(NL.EQ.IE)GO TO 2703
C JUMP IF "REP"
IF(NL.EQ.IEL)GO TO 6704
IF(NL.EQ.IEN)GO TO 6705
CVT=1
CODE=-22
GO TO 1016
6704 CODE=-46.0
C FOR "RLIST" (LIST OF RAND SELECTIONS)
GO TO 1016
C JUMP IF NOT "RNOTES"
6705 JA=0
C FOR SCANR
CODE=-36.
GO TO 7
6005 IF(NL.EQ.IU)GO TO 6706
CODE=-33
7 CVT=-1
GO TO 1016
6706 CODE=-44.
1610 JA=-1
GO TO 1016
703 BW=V(IJ-2)
IC=0
JDO=ML+1
DO 7031 K=JDO,72
IF(INP(K).EQ.ISEMI)GO TO 8031
7031 IF(INP(K).EQ.IXX)IC=-1
C**************** JUNE 1,71 X 4
8031 I=I-1
V(I)=0
C ********* FEB. 15,71
X=-9900.-BY
IF(BY.EQ.0)X=-9900.-BG(LK)
IF(BW.EQ.X)GO TO 8005
IF(BW.NE.-9900.-BY)GO TO 1102
V(IJ-2)=X
GO TO 8005
1102 V(IJ)=V(IJ-1)
V(IJ-1)=X
IJ=IJ+1
I=I+1
8005 LP=IJ-1
BW=-9900.-X
ISUB=2
IZ=-1
C ABOVE ARRANGES NECESSARY BG TIME HEADINGS.
GO TO 1299
102 IF(IZ.LT.0)GO TO 2102
BW=V(ICT)+BW
V(I)=-9900.-BW
V(I+1)=V(LP)
V(I+2)=(JJ+3)*ALL
C 3 LEAVES ROOM FOR CNVRT CODE AT END.
V(I+3)=CODE+DF
I=I+4
IZ=1
2102 IF(BW.LT.10000.)CALL BGSORT(BW)
C ROUND-OFF NONSENSE
2 VX3=-9900.
VX2=VX3
CALL SCANR
IF(JJ.GT.0)GO TO 5102
JJ=ILIT
C SLASH WILL REPEAT MOVE INPUT -- 6/74
DO 6102 K=1,JJ
6102 VX(K)=VX(K+20)
GO TO 5005
C::::::::::::::: PUT THIS, AND AT 5505, IN SCOR5 ALSO ::::::::::::::
5102 IF(JJ.EQ.4)GO TO 99
IF(VX3.NE.-9900.)GO TO 3102
IF(VX2.NE.-9900.)GO TO 4102
VX2=VX1
VX1=10000.
4102 VX3=VX2
JJ=3
C 1,2 OR 3 NUMS CAN BE USED IN NON-RAN MOVES.
3102 IF(IZ.GE.0)GO TO 3006
V(IJ)=(JJ+3)*ALL
C**** +3 FOR MUSIC5 ******
C WORD COUNT
CODE=-55.
IF(JJ.NE.3)CODE=-57.
C THIS IS NOW OUT, FEB 15,70. -10000. MEANS 'NOTES AT BG TIME 0'
IF(NFLG.LT.0)CODE=CODE-1.
IF(IC.LT.0)CODE=-59.
C**************** JUNE 1,71
C CODE=-56 OR -58 FOR NOTES.
V(IJ+1)=CODE+DF
IZ=0
3006 IF(NFLG.EQ.1)GO TO 5005
CVT=-1
CALL RANR(VX,2)
IF(JJ.NE.3)CALL RANR(VX,4)
C FOR RAN. SELEC. OF NOTES. FINDS HIGHEST NOTE.
5005 ICT=I
ILIT=JJ
C SAVES FOR SLASH REPEAT FEATURE 6/74
IJ=IJ+1
DO 1006 K=1,JJ
1006 V(IJ+K)=VX(K)
I=I+JJ
V(I)=CVT
I=I+1
C ADDS CNVRT CODE AT END
IJ=I+2
IF(IAMP.EQ.0)GO TO 1299
C*** MAY 18,71 ** ALWAYS RESETS TO TIME 0 WHEN MOVE IS USED.
V(I)=-9900.-BY
GO TO 8703
C ABOVE IS FOR 'DF' (DUTY FACTOR)
7703 V(IJ)=4.*ALL
8703 I=I+1
GO TO 4773
C FOR SUBROUTINES, -12=NUMS. -11=LETTERS.
6703 CODE=-12.
IF(INP(ML+3).EQ.IEL)CODE=-11.
V(IJ)=2.*ALL
V(IJ+1)=CODE+DF
I=I-1
GO TO 4773
2338 I=I-4
GO TO 4773
C 'REP'
2703 ML=ML+1
VX1=0
VX2=0
VX3=0
IF(N.EQ.IXX)GO TO 2704
INP(ML)=IBLA
INP(ML+1)=IBLA
C WIPES OUT 'EP' IN 'REP'
2704 CALL SCANR
V(IJ)=3.
V(IJ+1)=-66.0
IF(VX1.EQ.32.)VX1=1.
IF(VX1.EQ.0)VX1=LPAR
IF(VX2.EQ.0)VX2=LK-1
V(IJ+2)=VX1+VX2*10000.
KL=VX2
IF(DUR(LK).LT.0)DUR(LK)=DUR(KL)
IF(VX3.EQ.0)GO TO 4773
L=VX3
ML=LK+1
DO 1018 KL=ML,L
IF(LPAR.GT.NP(KL).AND.LPAR.LT.31)NP(KL)=LPAR
IF(DUR(KL).LT.0)DUR(KL)=DUR(LK)
C TO SET DUR WHEN DUPLICATING NOTES THAT END WITH 'END;;'
V(I)=V(I-4)+10000.
V(I+1)=3.
V(I+2)=-66.
V(I+3)=V(I-1)
1018 I=I+4
GO TO 4773
2018 V(IJ)=3.
V(IJ+1)=-66.
V(IJ+2)=NW+LK*10000
GO TO 4773
7720 V(I)=LK
V(I+1)=3.
V(I+2)=-67.
ML=ML+4
CALL SCANR
V(I+3)=VX1
I=I+4
L=VX1
IF(NP(LK).LT.NP(L))NP(LK)=NP(L)
IF(DUR(LK).LT.0)DUR(LK)=DUR(L)
GO TO 4773
C TYPE 'DUPL N;' N=INST # TO BE DUPLICATED.
2114 FORMAT(I,72A1)
1899 CALL SCANR
GO TO(1,2,3,4,5),ISUB
1106 KTMP=1
TP=60.
IAMP=0
BW=BY
ITMP=-1
ISUB=5
JA=-1
GO TO 2016
3019 V(I)=990000.00
V(I+1)=4.
V(I+2)=VX1
V(I+3)=VX2/TP
V(I+4)=VX3/TP
I=I+5
BY=BW
C SEPT 18, 70
IF(VX1.EQ.0)GO TO 2308
BW=BW+VX1
V(I)=-9900.-BW
I=I+1
CALL BGSORT(BW)
9003 IF(IAMP.LT.0)GO TO 4003
2016 VX3=0
VX2=0
GO TO 1299
5 IF(VX2.NE.0)GO TO 105
C 'TEMPO/120*;' OR 'TEMPO/1.5 72*;' IS OK.
VX2=VX1
VX1=0
105 IF(VX3.EQ.0)VX3=VX2
IF(VX2.LT.11.)TP=1.
IF(J.EQ.ITMPO)GO TO 3019
PCH(1,KTMP)=VX1
PCH(2,KTMP)=VX2
PCH(3,KTMP)=VX3
C PCH(1)=TIME (2)=MM1 (3)=MM2
KTMP=KTMP+1
IF(IAMP.EQ.0)GO TO 2016
4003 VX1=0
IAMP=0
VX2=VX3
IF(J.EQ.ITMPO)GO TO 3019
PCH(1,KTMP)=0
PCH(2,KTMP)=VX2
PCH(3,KTMP)=VX2
C MM CAN BE FROM 11 UP ITMPO FACTOR FROM 10 DOWN.
C UP TO 30 ITMPO CHANGES MAY BE MADE.
1016 IA=I
IZ=1
3100 V(I-2)=CODE+DF
ISUB=3
5016 IF(IAMP.GE.0)GO TO 1299
117 IF(IZ-2)3013,9004,9004
103 K=INP(ML)
IF(K.EQ.ITT)GO TO 1106
IF(K.EQ.ISEMI)GO TO 1014
IF(K.NE.IBLA) GO TO 1899
ML=ML+1
GO TO 103
C@@@@@@@@ MAY 13,71 @@@@@@
C**********FEB 19,71
C ABOVE
3 IF(VX1.EQ.-99.)GO TO 4022
IF(CODE.EQ.-22.)GO TO 2017
C************ MAY 19,71
IF(CODE.LT.-23.OR.IZ/2*2.EQ.IZ)GO TO 17
C CHECKS PAIRS OF NUMBERS FOR 'RTAP'
2017 IF(VX1.EQ.10000.)GO TO 17
VX1=4./VX1
IF(JJ.NE.1)GO TO 2014
V(I)=VX1
GO TO 114
1217 IF(VX1.EQ.10000.)GO TO 114
C FOR "FINE" IN LIST
C ABOVE EXTENDS RANGE TO GIVE HIGHEST NOTE A CHANCE
V(I+1)=VX2
IF(CODE.EQ.-36.)CALL RANR(V,I)
2217 I=I+1
C SETS UP STRING OF RAND SELECTIONS
GO TO 114
3217 V(I)=V(I-2)
V(I+1)=RB
C FOR SLASH REPTS OF RAND SELEC UNITS. ("REP" CAN'T BE USED!)
GO TO 2217
C******** PUT IN ERROR TRAP FOR "REP" ETC. ******
2014 DO 9006 L=2,JJ
IF(VX(L).EQ.0)GO TO 17
9006 VX1=4./VX(L)+VX1
JJ=1
17 V(I)=VX1
IF(CODE.EQ.-46..OR.CODE.EQ.-36.)GO TO 1217
C JUMP IF STRING OF RAND SELECS.
IF(JJ.EQ.1)GO TO 114
L=VX(JJ)-1
X=V(I)
NL=I+1
I=L+I
DO 1017 K=NL,I
1017 V(K)=X
C ADDS UP TOTAL OF NOTES IN SEQ.
IZ=IZ+L
GO TO 114
1014 IF(CODE.EQ.-46..OR.CODE.EQ.-36.)GO TO 3217
V(I)=RB
C RB SAVES IT FOR SLASH REPEAT
114 RB=V(I)
I=I+1
IZ=IZ+1
GO TO 5016
4022 JC=VX2+.3
JD=VX3-.5
IF(JJ.EQ.2)JD=1
C********* MAY 19,71 ----MANY LINES ABOVE.
IZ=IZ+JC*JD
C JC=HOW MANY TIMES, JD=HOW MANY NOTES
DO 1005 K=1,JD
NL=I+JC-1
DO 2005 L=I,NL
2005 V(L)=V(L-JC)
1005 I=I+JC
RB=V(NL)
C RB SAVES DATA FOR SLASH REPEAT FEATURE.
GO TO 5016
9004 IF(ITMP.EQ.0)GO TO 3013
C*********** JUNE 1,71
KA=1
IC=1
K=0
J=1
Z=0
RC=0
9007 Y=PCH(3,IC)/TP
X=PCH(2,IC)/TP
Z=PCH(1,IC)
CALL SQYY(YY,X,Y,Z)
XT(1)=X
XA=RA
RD=1
RB=0
ZZ=Z
7020 RA=V(IA+K)
IF(RA.EQ.10000.)GO TO 3013
4020 CALL ACCL(RA,KA,RC,XA,Z,Y,X,XT(J),YY,RB,W)
IF(RC.NE.0)GO TO 1011
V(IA+K)=RA*RD
IF(K.EQ.IZ)GO TO 3013
C*********** JUNE 1,71
1011 IF(T5.EQ.1)GO TO 2011
K=K+1
IF(ZZ.NE.0)Z=Z-W
IF(Z.GT.0.OR.RB.EQ.-1.)GO TO 7020
IC=IC+1
IF(RB.EQ.W)GO TO 9007
KA=0
K=K-1
GO TO 9007
C********* MAY 13,71 OMITS REPEATED RHY. FEATURE.
3013 V(I)=CVT
I=I+1
C ADDS ONE FOR CONVRT CODE (0, -1 OR 1)
X=I-IJ
V(IJ+2)=X-4.
V(IJ)=X*ALL
GO TO 4773
2011 CALL ACCL2(XA,RA,K,ZPAR,CHN,ZZ,KA,X,Y,Z,YY,PR)
GO TO 4020
END